package com.lanyou.esb.cook.proxy.service;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.lanyou.esb.cook.proxy.entity.IfAlarm;
import com.lanyou.esb.cook.proxy.entity.IfAlarmWorkOrder;
import com.lanyou.esb.cook.proxy.exception.PersistentDataException;

/**
 * 接口告警工单处理接口
 * 
 * @author Davey.wu
 */
public interface IfAlarmWorkOrderService {
	/**
	 * 保存工单
	 * 
	 * @param orders
	 *            ：工单集合
	 * @throws PersistentDataException
	 */
	void save(List<IfAlarmWorkOrder> orders) throws PersistentDataException;

	/**
	 * 生成工单
	 * 
	 * @param alarm
	 *            ：接口告警信息
	 * @return
	 * @throws IOException
	 * @throws JsonMappingException
	 * @throws JsonParseException
	 */
	IfAlarmWorkOrder generateWorkOrder(IfAlarm alarm)
			throws JsonParseException, JsonMappingException, IOException;

	/**
	 * 生成工单号<br>
	 * 功能描述：<br>
	 * 告警工单号编码组成：WO+时间+告警类型+告警等级+流水号<br>
	 * 
	 * 说明：<br>
	 * 总长度：2+8+2+2+5=18<br>
	 * WO：前缀标识（大写）；<br>
	 * 时间：yyyyMMdd 【年（4位）月（2位）日（2位）】；<br>
	 * 告警类型：2位，比如， 01：请求超时；02：请求超限；03：Http400错误；<br>
	 * 告警等级：2位，比如， 01：一般告警；02：重要告警；03：紧急告警；<br>
	 * 流水号：8位数字（递增，以天为单位，每天从1开始）；<br>
	 * 
	 * 示例：2016年8月22号11点1分1秒产生告警，告警类型：请求超时，告警等级：一般告警，流水号00000001。则相应的告警工单号为：
	 * WO20160822010100001<br>
	 * 
	 * @param alarm
	 *            ：接口告警信息
	 * @param date
	 *            :派单时间
	 * @return
	 * @throws IOException
	 * @throws JsonMappingException
	 * @throws JsonParseException
	 */
	String genereateWoNo(IfAlarm alarm, Date date) throws JsonParseException,
			JsonMappingException, IOException;
}
